home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / Spiele / GEMSPIEL / COLTRIS / SOURCES / CLTR.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-05  |  5.9 KB  |  276 lines

  1. #include <vdi.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>    /* mem... */
  5.  
  6. /*
  7.         hmm, might be somewhere more common...
  8. */
  9. typedef unsigned int    uint;
  10. #define min(a,b)    (a)<(b)?(a):(b)
  11. #define max(a,b)    (a)>(b)?(a):(b)
  12.  
  13. /*
  14.     typedefinitionen
  15. */
  16.  
  17. /*
  18.         FENSTER
  19. */
  20.  
  21. #define WIND_ANZ    4
  22.  
  23. typedef enum {
  24.     W_ERROR=-1,
  25.     W_PLAY,
  26.     W_SCORE,
  27.     W_PREVIEW,
  28.     W_STATISTIC,
  29. } WINDOWS;
  30.  
  31. typedef struct {
  32.     int handle;
  33.     void (*redraw)(int *message);
  34.     void (*close)(void);
  35. } WINDOW;
  36.  
  37. /*
  38.         funktionen für ein spiel
  39. */
  40. typedef struct {
  41.     char *name;
  42.     void (*preview)(void);
  43.     void (*dr_stat)(int x,int y,int dy);
  44.     uint (*play)(void);
  45.     int game_width;            /* spielfeldbreite in bloecken */
  46.     int game_height;        /* spielfeldhöhe in bloecken */
  47.     int game_firstline;        /* erste genutzte zeile */
  48.     int prev_width;            /* breite des preview-feldes in bloecken */
  49.     int prev_height;        /* hoehe des preview-feldes in bloecken */
  50.  
  51.  
  52.                             /* rest wird beim laden der spielblöcke eingetragen */
  53.  
  54.     void (*dr_block)(int x,int y,int col);
  55.     MFDB bloecke;
  56.     MFDB xbloecke[4];
  57.  
  58.     int vdi;
  59.     int block_w;
  60.     int block_h;
  61.     int block_xw;        /* w-1 */
  62.     int block_xh;
  63.  
  64.     int source_width;    /* abstand der blöcke im source-mfdb */
  65.  
  66.     int last_flash;        /* letzter block für aufblitzen vor remove */
  67.  
  68.     int x_pos[32];        /* pixel positionen als fkt von block pos. */
  69.     int y_pos[32];
  70. } GAME;
  71.  
  72. /*
  73.         spielmodi
  74. */
  75. typedef enum {
  76.     PM_TETRIS,
  77.     PM_COLUMNS,
  78. } PLAY_MODE;
  79.  
  80. #define PM_NUMBER    2                /* zahl der spielmodi */
  81.  
  82. /*
  83.         OPTIONEN
  84. */
  85. /*
  86.         optionen eines spiels
  87. */
  88. typedef struct {
  89.     int start_level;
  90.     int random;
  91.     int score;            /* 0 hide    1 show */
  92.     int preview;
  93.     int statistic;
  94. } GAME_OPTS;
  95.  
  96. /*
  97.         hiscore eines spiels
  98. */
  99. typedef struct {
  100.     char name[14];
  101.     uint date;
  102.     uint score;
  103. } HI_SCORE;
  104.  
  105. /*
  106.         fensterposition (breite ist eh fix)
  107. */
  108. typedef struct {
  109.     int x;
  110.     int y;
  111. } WIND_POS;
  112.  
  113. typedef struct {
  114.     WIND_POS wind_pos[4];/* WORK-Koord. */
  115.     int width,height;    /* spielfeldgröße */
  116.     int desk_x,desk_y,desk_w,desk_h;
  117. } POSITION;
  118.  
  119. #define POSITIONS    10    /* zahl der verwalteten bildschirm/block-größen */
  120.  
  121. /*
  122.     optionen
  123. */
  124. typedef struct {
  125.     PLAY_MODE play_mode;
  126.  
  127.     int dummy;
  128.     int alert;
  129.     int sound;
  130.     int cycle;            /* 0 none, 1 play, 2 all */
  131.     int top;            /* 1 toppe alle fenster */
  132.     int multi;            /* 0 single, 1 multi */
  133.     int graph;            /* 0 direkt, 1 vdi */
  134.     int left;
  135.     int right;
  136.     int rotate;
  137.     int rot_ccw;
  138.     int drop;
  139.  
  140.     HI_SCORE hiscore[PM_NUMBER][10];    
  141.     GAME_OPTS opts[PM_NUMBER];
  142.  
  143.     POSITION pos[PM_NUMBER][POSITIONS];
  144.  
  145.     char stone_file[PM_NUMBER][4][32];
  146. } OPTS;
  147.  
  148. typedef enum {
  149.     NO_KEY,
  150.     K_LEFT,
  151.     K_RIGHT,
  152.     K_ROTATE,
  153.     K_ROT_CCW,
  154.     K_DROP,
  155.     K_LEVEL,
  156.     K_NEXT,
  157.     K_INFO,
  158.     K_STAT,
  159.     K_STOP,
  160.     K_QUIT,
  161. } KEY;
  162.  
  163. typedef enum {
  164.     S_START,            /* 1  spielanfang */
  165.     S_NEW,                /* 2Z neuer stein */
  166.     S_LEFT,                /* 4z stein nach links */
  167.     S_CANT_LEFT,        /* 4z stein nach links unmöglich */
  168.     S_RIGHT,            /* 4z stein nach rechts */
  169.     S_CANT_RIGHT,        /* 4z stein nach rechts unmöglich */
  170.     S_ROTATE,            /* 4z rotiere */
  171.     S_CANT_ROTATE,        /* 4z rotieren unmöglich */
  172.     S_ROT_CCW,            /* 4z rotiere counterclockwise */
  173.     S_CANT_ROT_CCW,        /* 4z rotiere counterclockwise unmöglich */
  174.     S_STEPDOWN,            /* 3Z schritt nach unten */
  175.     S_DROP,                /* 3Z start vom freien fall */
  176.     S_DROPDOWN,            /* 3Z schritt nach unten im freien fall */
  177.     S_DOWN,                /* 2Z stein unten angekommen */
  178.     S_NEWLEVEL,            /* 1  neuer level */
  179.     S_REMOVE,            /* 1  entferne steine */
  180.     S_ABORT,            /* 1  spiel wurde abgebrochen */
  181.     S_GAMEOVER,            /* 1  spiel ist zu ende */
  182.     S_HISCORE,            /* 1  neuer hiscore erreicht */
  183.     S_NOHISCORE,        /* 1  kein neuer hiscore erreicht */
  184.                         /* ^ soundlevel, aufrufe werden nur compiliert, wenn
  185.                              SOUND_LEVEL>=soundlevel 
  186.                            z Routine SEHR zeitkritisch (sollte schnell beendet werden)
  187.                            Z Routine zeitkritisch (sollte schnell beendet werden)
  188.                         */
  189. } SOUND_FKT;
  190.  
  191. typedef void (*Copy_Out)(void);
  192.  
  193. extern Copy_Out copy_out;            /* zeiger auf fkt. zur ausgabe 
  194.                                         des puffers auf screen */
  195. extern int copy_min,copy_max;        /* auszugebender bereich */
  196.  
  197. extern int handle;
  198.  
  199. extern MFDB screen;
  200. extern MFDB buffer;
  201.  
  202. extern int planes_nr,planes,columns_vdi,tetris_vdi;
  203. extern long screen_addr,buffer_addr;
  204. extern int buffer_width,buffer_height;
  205. extern long buffer_size;
  206. extern int screen_width;
  207.  
  208. extern GAME *game;
  209. extern WINDOW wind[WIND_ANZ];
  210. extern int x_off,y_off;
  211. extern int width;
  212. extern int screen_w,screen_h;
  213. extern uint last_score;
  214. extern int quick_flag;
  215.  
  216. extern OPTS opts;
  217.  
  218. extern int preview_flag;        /* 0 off, 1 on */
  219. extern int prev_x,prev_y,prev_w,prev_h;
  220. extern int stat_flag;            /* 0 off, 1 tetris, 2 columns */
  221. extern int score_flag;
  222. extern int stat_x_off,stat_y_off;
  223.  
  224. KEY get_key(void);                /* hole spiel-taste (interpretiert zeichen...) */
  225. int xget_key(void);                /* warte auf taste (returns scancode) */
  226. void clr_keys(void);            /* lösche tastatur-puffer */
  227.  
  228. void window_closed(void);        /* während des spielens wurde ein fenster geschlossen */
  229. void do_pause(void);            /* warte bis taste gedrückt */
  230.  
  231. uint calc_delay(uint level);    /* berechne verzögerung für level */
  232.  
  233. void init_wait(void);            /* initialisiere warten */
  234. void do_wait(int ms);            /* warte ms millisek. */
  235.  
  236. long xrandom(void);
  237. long gettime(void);
  238.  
  239. int check_recs(int x,int y,int w,int h,int *x1,int *y1,int *w1,int *h1);
  240. void redraw_play(int *message);
  241. int do_control(int flag);
  242.  
  243. void do_exit(int ret);
  244.  
  245. void set_score(void);
  246. void dr_score(uint,uint,uint,uint);
  247.  
  248. void set_preview(void);
  249. void redraw_preview(int *message);
  250.  
  251. void set_statistic(void);
  252. void dr_stat(uint *stat);
  253.  
  254. int init_image(GAME *game,char *name,int argc,char **argv);
  255. void change_stones(void);
  256.  
  257. void init_quickcopy(void);
  258. void inv_feld(void);
  259.  
  260.  
  261.  
  262. /*
  263.     columns routinen 
  264.     tetris routinen 
  265. */
  266. extern GAME columns;
  267. extern GAME tetris;
  268.  
  269. /*
  270.     sound funktionen
  271. */
  272. void init_sound(int argc,char *argv[]);
  273. void do_sound(SOUND_FKT sound);
  274.  
  275.  
  276.